const { Category } = require('../models');
const { Op } = require('sequelize');

// 获取分类列表
exports.getCategories = async (req, res) => {
  try {
    const categories = await Category.findAll({
      order: [['id', 'ASC']]
    });
    
    res.status(200).json({
      success: true,
      data: categories
    });
  } catch (error) {
    console.error('获取分类列表失败:', error);
    res.status(500).json({
      success: false,
      message: '获取分类列表失败，请稍后重试'
    });
  }
};

// 创建分类
exports.createCategory = async (req, res) => {
  try {
    const { name, description } = req.body;
    
    // 验证输入
    if (!name) {
      return res.status(400).json({
        success: false,
        message: '分类名称不能为空'
      });
    }
    
    // 检查分类是否已存在
    const existingCategory = await Category.findOne({ where: { name } });
    if (existingCategory) {
      return res.status(400).json({
        success: false,
        message: '分类名称已存在'
      });
    }
    
    // 创建分类
    const category = await Category.create({
      name,
      description
    });
    
    res.status(201).json({
      success: true,
      message: '分类创建成功',
      data: category
    });
  } catch (error) {
    console.error('创建分类失败:', error);
    res.status(500).json({
      success: false,
      message: '创建分类失败，请稍后重试'
    });
  }
};

// 更新分类
exports.updateCategory = async (req, res) => {
  try {
    const { id } = req.params;
    const { name, description } = req.body;
    
    // 验证输入
    if (!name) {
      return res.status(400).json({
        success: false,
        message: '分类名称不能为空'
      });
    }
    
    // 查找分类
    const category = await Category.findByPk(id);
    
    if (!category) {
      return res.status(404).json({
        success: false,
        message: '分类不存在'
      });
    }
    
    // 检查新名称是否与其他分类重复
    const existingCategory = await Category.findOne({ 
      where: { name, id: { [Op.ne]: id } } 
    });
    
    if (existingCategory) {
      return res.status(400).json({
        success: false,
        message: '分类名称已存在'
      });
    }
    
    // 更新分类
    await category.update({
      name,
      description
    });
    
    res.status(200).json({
      success: true,
      message: '分类更新成功',
      data: category
    });
  } catch (error) {
    console.error('更新分类失败:', error);
    res.status(500).json({
      success: false,
      message: '更新分类失败，请稍后重试'
    });
  }
};

// 删除分类
exports.deleteCategory = async (req, res) => {
  try {
    const { id } = req.params;
    
    // 不允许删除默认分类
    if (parseInt(id) <= 5) {
      return res.status(400).json({
        success: false,
        message: '默认分类不允许删除'
      });
    }
    
    // 查找分类
    const category = await Category.findByPk(id);
    
    if (!category) {
      return res.status(404).json({
        success: false,
        message: '分类不存在'
      });
    }
    
    // TODO: 检查是否有账号使用此分类，如果有，需要先转移或提示用户
    
    // 删除分类
    await category.destroy();
    
    res.status(200).json({
      success: true,
      message: '分类删除成功'
    });
  } catch (error) {
    console.error('删除分类失败:', error);
    res.status(500).json({
      success: false,
      message: '删除分类失败，请稍后重试'
    });
  }
};